package com.ask.forMe.langchain4j.rag.utils;

import java.nio.charset.StandardCharsets;
import java.util.function.Function;

public class StringSizeCalculator {
    private final Function<String, Integer> sizeFunction;

    /**
     * 构造函数：创建一个使用指定计算策略的计算器
     * @param sizeFunction
     */
    public StringSizeCalculator(Function<String, Integer> sizeFunction) {
        this.sizeFunction = sizeFunction;
    }

    /**
     * 计算给定的字符串大小
     *
     * @param text
     * @return
     */
    public int sizeOf(String text) {
        return this.sizeFunction.apply(text);
    }

    /**
     * 创建一个按字符串长度计算大小的计算器1
     *
     * @return
     */
    public static StringSizeCalculator lengthCalculator() {
        return new StringSizeCalculator(String::length);
    }

    /**
     * 创建一个按单词数量计算大小的计算器
     */
    public static StringSizeCalculator wordCountCalculator() {
        return new StringSizeCalculator(s -> s.isEmpty() ? 0 : s.split("\\s+").length);
    }

    /**
     * 创建一个按UTF-8字节数计算大小的计算器
     */
    public static StringSizeCalculator byteCalculator() {
        return new StringSizeCalculator(s -> s.getBytes(StandardCharsets.UTF_8).length);
    }

}
